今天要來介紹一款很酷的 AI 平台 - Groq (不是Grok )
Groq 提供超快的API回傳速度,支援多種開源的LLM模型
重點是它提供免費API的方案,也就是前期測試的時候,可以完全不花錢
只需要注意免費版的Rate Limit即可: https://console.groq.com/docs/rate-limits
那我們今天就在 Unity 中實現 Groq API 的功能
由於 Groq 只是一個 LLM 對話的平台, 所以我們只需要考慮對話的功能就好
GroqAICore:
using System;
using System.Collections;
using System.Text;
using Core;
using Newtonsoft.Json;
using PolarAI.Scripts.AICore.Groq.Model;
using UnityEngine;
using UnityEngine.Networking;
namespace PolarAI.Scripts.AICore.Groq
{
public class GroqAICore
{
private string ApiKey = "YOUR_GROQ_API_KEY";
private string AIModel = "openai/gpt-oss-120b";
private float Temperature = 0.2f;
private const string ChatCompletionsUrl = "https://api.groq.com/openai/v1/chat/completions";
public void Initialize(string apiKey)
{
ApiKey = apiKey;
}
public void SetModel(string model)
{
AIModel = model;
}
public void SetTemperature(float temperature)
{
Temperature = temperature;
}
public void SendChat(string role, string prompt, Action<string, bool> onCompleted)
{
if (string.IsNullOrEmpty(ApiKey))
{
Debug.LogWarning("【Error】Please Initialize Groq API Key First.");
return;
}
var req = new ChatRequest
{
Model = AIModel,
Temperature = Temperature,
Messages = new[]
{
new ChatMessage(role, prompt)
}
};
CoroutineManager.Instance.StartCoroutine(SendChatCoroutine(req, onCompleted));
}
public void SendChatList(ChatMessage[] chatMessages, Action<string, bool> onCompleted)
{
if (string.IsNullOrEmpty(ApiKey))
{
Debug.LogWarning("【Error】Please Initialize Groq API Key First.");
return;
}
var req = new ChatRequest
{
Model = AIModel,
Temperature = Temperature,
Messages = chatMessages
};
CoroutineManager.Instance.StartCoroutine(SendChatCoroutine(req, onCompleted));
}
private IEnumerator SendChatCoroutine(ChatRequest request, Action<string, bool> onCompleted)
{
var json = JsonConvert.SerializeObject(request);
var body = Encoding.UTF8.GetBytes(json);
using var www = new UnityWebRequest(ChatCompletionsUrl, "POST");
www.uploadHandler = new UploadHandlerRaw(body);
www.downloadHandler = new DownloadHandlerBuffer();
www.SetRequestHeader("Authorization", "Bearer " + ApiKey);
www.SetRequestHeader("Content-Type", "application/json");
yield return www.SendWebRequest();
var isError = www.result != UnityWebRequest.Result.Success;
if (isError)
{
onCompleted?.Invoke($"【HTTP {www.responseCode}】{www.error}\n{www.downloadHandler.text}", false);
yield break;
}
var responseText = www.downloadHandler.text;
try
{
var resp = JsonConvert.DeserializeObject<ChatResponse>(responseText);
var content = resp?.Choices is { Length: > 0 } ? resp.Choices[0].Message?.Content : null;
if (string.IsNullOrEmpty(content))
{
onCompleted?.Invoke("【Error】Reply Content Is Empty .\nRaw:\n" + responseText, false);
}
else
{
onCompleted?.Invoke(content.Trim(), true);
}
}
catch (Exception ex)
{
onCompleted?.Invoke("【JSON Deserialize Error】" + ex.Message + "\nRaw:\n" + responseText, false);
}
}
}
}
上面的代碼是我們的API呼叫核心
接下來我們可以寫一個簡單的UI界面來調用它
GroqAICore ai = new GroqAICore();
ai.Initialize("YOUR_KEY");
ai.SetModel("openai/gpt-oss-120b");
ai.SendChat("user", "幫我生成 3 句歡迎詞", (content, ok) =>
{
Debug.Log(ok ? content : "Error: " + content);
});
var messages = new[]
{
new ChatMessage("system", "你是專業的遊戲文案助手"),
new ChatMessage("user", "幫我寫角色介紹,風格史詩奇幻")
};
GroqAICore ai = new GroqAICore();
ai.Initialize("YOUR_KEY");
ai.SetModel("openai/gpt-oss-120b");
ai.SendChatList(messages, (content, ok) => { /* 更新 UI */ });
Unity UI Example:
using UnityEngine;
using UnityEngine.UI;
namespace PolarAI.Scripts.AICore.Groq.Example
{
public class GroqExample : MonoBehaviour
{
[Header("Groq Settings")]
[SerializeField]
[Tooltip("Get Groq API: https://console.groq.com/keys")]
private string apiKey = "YOUR_GROQ_API_KEY";
[SerializeField]
[Tooltip("Check Groq Model: https://console.groq.com/home")]
private string model = "openai/gpt-oss-120b";
[Range(0f, 2f)]
[SerializeField] private float temperature = 0.2f;
[Header("UI (Unity UI)")]
[SerializeField]
private Button sendButton; // 拖入要測試的 Button
[SerializeField] private InputField inputField; // 也可留空,會用預設提示
[SerializeField] private Text outputText; // 顯示結果
private GroqAICore GroqAICore = new();
private void Start()
{
GroqAICore.Initialize(apiKey);
GroqAICore.SetModel(model);
GroqAICore.SetTemperature(temperature);
if (sendButton != null) sendButton.onClick.AddListener(OnClickSend);
}
private void OnDisable()
{
if (sendButton != null) sendButton.onClick.RemoveListener(OnClickSend);
}
private void OnClickSend()
{
if (string.IsNullOrEmpty(apiKey))
{
Debug.Log("【Error】Please Set Groq API Key First.");
return;
}
GroqAICore.SendChat("user", inputField.text, (content, isSuccess) =>
{
outputText.text = content;
});
}
}
}